-
Notifications
You must be signed in to change notification settings - Fork 3k
feat: slug field #14007
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: slug field #14007
Conversation
📦 esbuild Bundle Analysis for payloadThis analysis was generated by esbuild-bundle-analyzer. 🤖
Largest pathsThese visualization shows top 20 largest paths in the bundle.Meta file: packages/next/meta_index.json, Out file: esbuild/index.js
Meta file: packages/payload/meta_index.json, Out file: esbuild/index.js
Meta file: packages/payload/meta_shared.json, Out file: esbuild/exports/shared.js
Meta file: packages/richtext-lexical/meta_client.json, Out file: esbuild/exports/client_optimized/index.js
Meta file: packages/ui/meta_client.json, Out file: esbuild/exports/client_optimized/index.js
Meta file: packages/ui/meta_shared.json, Out file: esbuild/exports/shared_optimized/index.js
DetailsNext to the size is how much the size has increased or decreased compared with the base branch of this PR.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the future we should have split PRs like this up. We could have done this in the following order:
- Add the slug field
- Create a separate PR to update the templates
- Release the newest version
- Merge the template change
🚀 This is included in version v3.59.0 |
Can i override format slug or hooks for more languages ? Thanks |
Yes we'll add that next |
There appears to be a conceptual issue with how slug uniqueness is enforced in the current implementation. The Problem:The current uniqueness constraint on the slug field doesn't account for hierarchical page structures. Consider the following tree:
The expected URL paths would be:
Both "Intro" pages should have slug: "intro", which correctly represents their position in their respective parent contexts. However, the current uniqueness validation would reject this as a duplicate slug, even though the full paths are distinct. Expected Behavior:For hierarchical/nested structures, uniqueness should be scoped to the parent context (i.e., slug should be unique among siblings), not globally unique across the entire collection. The fully qualified path (/docs/intro vs /about-us/intro) is what's truly unique, not the slug field itself. Suggested Solution:Either:
Is this the intended behavior, or should the validation be adjusted to support nested/hierarchical page architectures? |
Discussion #8859. Requires #14012.
Exports a new
slugField
. This is a wrapper around the text field that you can drop into any field schema.A slug is a unique, indexed, URL-friendly string that identifies a particular document, often used to construct the URL of a webpage. Slugs are a fundamental concept for seemingly every project.
Traditionally, you'd build this field from scratch, but there are many edge cases and nice-to-haves to makes this difficult to maintain by hand. For example, it needs to automatically generate based on the value of another field, provide UI to lock and re-generate the slug on-demand, etc.
Fixes #13938.
When autosave is enabled, the slug is only ever generated once after the initial create, leading to single character, or incomplete slugs.
For example, it is expected that "My Title" → "my-title, however ends up as "m".
This PR overhauls the field to feel a lot more natural. Now, we only generate the slug through:
create
operation, unless the user has modified the slug manuallyupdate
operation, if:a. Autosave is not enabled and there is no slug
b. Autosave is enabled, the doc is unpublished, and the user has not modified the slug manually
The slug should stabilize after all above criteria have been met, because the URL is typically derived from the slug. This is to protect modifying potentially live URLs, breaking links, etc. without explicit intent.
This fix, along with all the other features, is now standardized behind the new
slugField
:In the future we could also make this field smart enough to auto increment itself when its generated slug is not unique.